; thread.S
; 提供thread_yield的实现


; thread_yield需要做的事情如下:
; 1. 保存寄存器信息到线程栈上
; 2. 调用schedule调度程序

section .text

global thread_yield
global return_stub
extern schedule
extern thread_end

thread_yield:
    pushf
    push rax
    push rcx
    push rdx
    push rbx
    push rbp
    push rsi
    push rdi
    push rsp
    mov [rsp], rsp
    call schedule

; 从线程方法返回的时候返回值在rax中
; thread_end接受返回值是从rdi
return_stub:
    mov rdi, rax
    jmp thread_end
